﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion;
using BussinessLogicTecnoPez.Produccion.Compras;
using Tecnopez.Globals;

public partial class Modules_EnfermedadesControlEstanque_RegistrarTratamiento : System.Web.UI.Page
{

    private DetalleTratamiento listadoDetalle
    {
        get { return this.ViewState["listadoDetalle"] as DetalleTratamiento; }
        set { this.ViewState["listadoDetalle"] = value; }
    }

    private Tratamiento tratamientoActual
    {
        get { return this.ViewState["tratamiento"] as Tratamiento; }
        set { this.ViewState["tratamiento"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        TPPEmpleado.ObjType = typeof(Veterinario);
        TPPVeterinario.ObjType = typeof(Veterinario);

        if (!IsPostBack)
        {
            SetMode(PageMode.ListMode);
            TPPEnfermedadAlarma.ObjType = typeof(EnfermedadesEstanques);
        }

        ConfigurarGrilla();
        configurarGrillaDettale();

        cmdEliminar.OnClientClick = "return confirm('Esta seguro de eliminar el registro?');";

        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/tools.png";
        master.Titulo = "Registro de tratamientos";
        _lblError.Text = "";

        int idTratamiento;
        try
        {
            if (Request["idTratamiento"] != null)
            {
                if (Session["banderaDetalleTratamiento"] != null)
                {
                    if (Session["banderaDetalleTratamiento"].ToString() == "t")
                    {
                        if (int.TryParse(Request["idTratamiento"].ToString(), out idTratamiento))
                        {
                            VerTratamiento(idTratamiento);
                        }
                    }
                }
            }
        }
        catch
        {
        }
    }

    public void ConfigurarGrilla()
    {
        TPDTratamientos.setupGrid(typeof(Tratamiento), cargarGrilla, true, true, this.ViewState);
    }

    public void cargarGrilla()
    {
        Tratamiento.getManager.ClearFilters();
        Tratamiento.getManager.ClearOrders();

        if (TPPEmpleado.ItemSelected != null)
        {
            Tratamiento.getManager.AddFilter("Veterinario", GenericManager<Tratamiento>.filterOperator.Equals, (TPPEmpleado.ItemSelected as Veterinario).IdVeterinario);
        }

        DateTime fechaInicioDesde;
        if (DateTime.TryParse(TPCFechaInicioDesde.Text, out fechaInicioDesde))
        {
            Tratamiento.getManager.AddFilter("FechaInicio", GenericManager<Tratamiento>.filterOperator.BiggerEqualsThan, TPCFechaInicioDesde.Text);
        }

        DateTime fechaInicioHasta;
        if (DateTime.TryParse(TPCFechaInicioHasta.Text, out fechaInicioHasta))
        {
            Tratamiento.getManager.AddFilter("FechaInicio", GenericManager<Tratamiento>.filterOperator.SmallerEqualsThan, TPCFechaInicioHasta.Text);
        }

        DateTime fechaFinDesde;
        if (DateTime.TryParse(TPCFechaFinDesde.Text, out fechaFinDesde))
        {
            Tratamiento.getManager.AddFilter("FechaFin", GenericManager<Tratamiento>.filterOperator.BiggerEqualsThan, TPCFechaFinDesde.Text);
        }

        DateTime fechaFinHasta;
        if (DateTime.TryParse(TPCFechaFinHasta.Text, out fechaFinHasta))
        {
            Tratamiento.getManager.AddFilter("FechaFin", GenericManager<Tratamiento>.filterOperator.SmallerEqualsThan, TPCFechaFinHasta.Text);
        }

        if (txtBuscarDescripcion.Text != "")
        {
            Tratamiento.getManager.AddFilter("descripcion", GenericManager<Tratamiento>.filterOperator.Like, "%" + txtDescripcion + "%");
        }

        if (Convert.ToInt32(cboBuscarResultado.SelectedValue) >= 0)
        {
            Tratamiento.getManager.AddFilter("resultado", GenericManager<Tratamiento>.filterOperator.Equals, Convert.ToInt32(cboBuscarResultado.SelectedValue));
        }


        if (ViewState[TPDTratamientos.PageDataViewOrderKey] == null)
        {
            Tratamiento.getManager.AddOrder("FECHAINICIO", GenericManager<Tratamiento>.Order.orderDirection.DESC);
        }
        else
        {
            Tratamiento.getManager.AddOrder(ViewState[TPDTratamientos.PageDataViewOrderKey].ToString(), (GenericManager<Tratamiento>.Order.orderDirection)ViewState[TPDTratamientos.PageDataViewOrdenDireccionKey]);
        }

        List<Tratamiento> lista = new List<Tratamiento>();
        lista = Tratamiento.getManager.GetFilter();
        TPDTratamientos.DataSource = lista;
        TPDTratamientos.DataBind();

    }

    private void SetMode(PageMode mode)
    {
        ViewState["PageMode"] = mode;
        switch (mode)
        {
            case PageMode.ListMode:
                mvABM.ActiveViewIndex = 0;
                break;
            case PageMode.NewMode:
                mvABM.ActiveViewIndex = 1;

                txtCodigo.ReadOnly = true;
                txtDescripcion.ReadOnly = false;
                TPPVeterinario.Enable = true;
                txtFechaInicio.ReadOnly = true;
                txtFechaFin.ReadOnly = true;
                TPCFechaEstimadaFin.Enabled = true;
                cboTipos.Enabled = true;
                TPPEnfermedadAlarma.Enable = true;
                txtResultado.ReadOnly = true;
                txtCantidadPecesInicial.ReadOnly = false;
                txtCantidadPecesFinal.ReadOnly = true;
                txtTamanoPecesInicial.ReadOnly = false;
                txtTamanoPecesFinal.ReadOnly = true;

                cmdTomarDatos.Enabled = true;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;


                TablaDetalle.Visible = true;
                TPDDetalle.Columns[TPDDetalle.Columns.Count - 1].Visible = true;

                btnCerrarTratamiento.Enabled = false;
                break;
            case PageMode.EditMode:
                mvABM.ActiveViewIndex = 1;

                txtCodigo.ReadOnly = true;
                txtDescripcion.ReadOnly = false;
                TPPVeterinario.Enable = true;
                txtFechaInicio.ReadOnly = true;
                txtFechaFin.ReadOnly = true;
                TPCFechaEstimadaFin.Enabled = true;
                cboTipos.Enabled = true;
                TPPEnfermedadAlarma.Enable = true;
                txtResultado.ReadOnly = true;
                txtCantidadPecesInicial.ReadOnly = false;
                txtCantidadPecesFinal.ReadOnly = true;
                txtTamanoPecesInicial.ReadOnly = false;
                txtTamanoPecesFinal.ReadOnly = true;
                cmdTomarDatos.Enabled = true;

                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;

                TablaDetalle.Visible = true;
                TPDDetalle.Columns[TPDDetalle.Columns.Count - 1].Visible = true;

                btnCerrarTratamiento.Enabled = true;
                break;
            case PageMode.ViewMode:
                mvABM.ActiveViewIndex = 1;
                txtCodigo.ReadOnly = true;
                txtDescripcion.ReadOnly = true;
                TPPVeterinario.Enable = false;
                txtFechaInicio.ReadOnly = true;
                txtFechaFin.ReadOnly = true;
                TPCFechaEstimadaFin.Enabled = false;
                cboTipos.Enabled = false;
                TPPEnfermedadAlarma.Enable = false;
                txtResultado.ReadOnly = true;
                txtCantidadPecesInicial.ReadOnly = true;
                txtCantidadPecesFinal.ReadOnly = true;
                txtTamanoPecesInicial.ReadOnly = true;
                txtTamanoPecesFinal.ReadOnly = true;
                cmdTomarDatos.Enabled = false;
                cmdAceptar.Visible = false;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = true;
                cmdEliminar.Enabled = true;

                TablaDetalle.Visible = false;
                TPDDetalle.Columns[TPDDetalle.Columns.Count - 1].Visible = false;

                btnCerrarTratamiento.Enabled = true;
                break;
        }
    }

    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.ListMode);
    }

    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        try
        {
            Tratamiento objTratamiento = new Tratamiento();
            objTratamiento.IdTratamiento = int.Parse(this.txtCodigo.Text.Trim());
            if (Tratamiento.getManager.Delete(objTratamiento) < 1)
            {
                throw Tratamiento.getManager.GeneratedException;
            }

            SetMode(PageMode.ListMode);
            cargarGrilla();
        }
        catch (Exception ex)
        {
            _lblError.Text = ex.Message;
        }
    }

    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.EditMode);
    }

    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.NewMode);
        txtCodigo.Text = "";
        txtDescripcion.Text = "";
        TPPVeterinario.ItemSelected = null;
        txtFechaInicio.Text = DateTime.Now.ToShortDateString();
        txtFechaFin.Text = "";
        TPCFechaEstimadaFin.Text = "";
        cboTipos.SelectedValue= "0";
        lblTipo.Text = "Enfermedad encontrada";
        TPPEnfermedadAlarma.ObjType = typeof(EnfermedadesEstanques);
        TPPEnfermedadAlarma.ItemSelected = null;
        txtResultado.Text = "Pendiente";
        txtCantidadPecesInicial.Text = "";
        txtCantidadPecesFinal.Text = "";
        txtTamanoPecesInicial.Text = "";
        txtTamanoPecesFinal.Text = "";
        this.listadoDetalle = new DetalleTratamiento();
        this.tratamientoActual = null;

    }
    protected void cboTipos_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cboTipos.SelectedValue == "0")
        {
            lblTipo.Text = "Enfermedad encontrada";
            TPPEnfermedadAlarma.ObjType = typeof(EnfermedadesEstanques);
        }
        else
        {
            lblTipo.Text = "Alerta registrada";
            TPPEnfermedadAlarma.ObjType = typeof(Alerta);
        }
    }
    protected void cmdAgregar_Click(object sender, EventArgs e)
    {
        foreach (ItemDetalleTratamiento itemVer in listadoDetalle)
        {
            if (itemVer.Actividad == txtActividad.Text && itemVer.Fecha.ToShortDateString()==TPCFechaDetalle.Text)
            {
                _lblDetalleError.Text = "Ya ingresó esa actividad en esa fecha";
                return;
            }
        }

        ItemDetalleTratamiento item = new ItemDetalleTratamiento();
        if (txtActividad.Text == "")
        {
            _lblDetalleError.Text = "Ingrese actividad";
            return;
        }
        item.Actividad = txtActividad.Text;

        int progreso;
        if (int.TryParse(txtProgreso.Text, out progreso))
        {
            if (progreso >= 0 && progreso <= 100)
            {
                item.Progreso = progreso;
            }
            else
            {
                this._lblDetalleError.Text = "Valor de progreso incorrecto";
                return;
            }
        }
        else
        {
            this._lblDetalleError.Text = "Valor de progreso incorrecto";
            return;
        }
        DateTime fechaDetalle ;
        if(DateTime.TryParse(TPCFechaDetalle.Text, out fechaDetalle))
        {
            item.Fecha=fechaDetalle;
        }
        else
        {
            _lblDetalleError.Text="Fecha incorrecta";
            return;
        }

        this.listadoDetalle.add(item);
        configurarGrillaDettale();
    }

    private void configurarGrillaDettale()
    {
        DataControlField[] extraButtons = new DataControlField[1];
        ButtonField colB = new ButtonField();
        colB.ButtonType = ButtonType.Image;
        colB.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/eliminar.gif";
        colB.HeaderText = "";
        colB.CommandName = "Eliminar";
        colB.HeaderStyle.Width = 5;
        colB.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        extraButtons[0] = colB;
        TPDDetalle.setupGrid(typeof(ItemDetalleTratamiento), cargarGrillaDetalle, true, false, this.ViewState, extraButtons);
    }

    protected void TPDDetalle_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (TPDDetalle.Rows[0].Cells[0].Text != "&nbsp;")
        {
            if (e.CommandName == "Eliminar")
            {
                Int32 indice = Convert.ToInt32(e.CommandArgument);
                indice = TPDDetalle.Rows[indice].DataItemIndex;
                listadoDetalle.ItemList.RemoveAt(indice);
            }
            configurarGrillaDettale();
        }
    }

    private void cargarGrillaDetalle()
    {
        if (listadoDetalle != null)
        {
            TPDDetalle.DataSource = listadoDetalle.ItemList;
            TPDDetalle.DataBind();
        }
        else
        {
            TPDDetalle.DataSource = null;
            TPDDetalle.DataBind();
        }
    }
    protected void cmdBuscar_Click(object sender, EventArgs e)
    {

    }
    protected void TPDTratamientos_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "ver")
        {
            int IdTratamiento = int.Parse(TPDTratamientos.DataKeys[System.Convert.ToInt32(e.CommandArgument)].Value.ToString());

            VerTratamiento(IdTratamiento);
        }
    }

    private void VerTratamiento(int IdTratamiento)
    {
        Tratamiento objTratamiento = Tratamiento.getManager.GetOneByPrimaryKey(IdTratamiento);
        txtCodigo.Text = objTratamiento.IdTratamiento.ToString();
        txtDescripcion.Text = objTratamiento.Descripcion.ToString();
        TPPVeterinario.ItemSelected = objTratamiento.Veterinario;
        txtFechaInicio.Text = objTratamiento.FechaInicio.ToShortDateString();
        if (objTratamiento.FechaFin==DateTime.MinValue)
        {
            txtFechaFin.Text = "";
            btnCerrarTratamiento.Visible = true;
        }else
        {
            txtFechaFin.Text = objTratamiento.FechaFin.ToShortDateString();
            btnCerrarTratamiento.Visible = false;
        }

        
        TPCFechaEstimadaFin.Text = objTratamiento.FechaEstimadaFin.ToShortDateString();
        if (objTratamiento.TipoTratamiento == 0)
        {
            cboTipos.SelectedValue = "0";
            lblTipo.Text = "Enfermedad encontrada";
            TPPEnfermedadAlarma.ObjType = typeof(EnfermedadesEstanques);
            TPPEnfermedadAlarma.ItemSelected = objTratamiento.EnfermedadEstanque;
        }
        else
        {
            cboTipos.SelectedValue = "1";
            lblTipo.Text = "Alerta registrada";
            TPPEnfermedadAlarma.ObjType = typeof(Alerta);
            TPPEnfermedadAlarma.ItemSelected = objTratamiento.Alerta;
        }

        if (objTratamiento.ResultadoPositivo == 0)
        {
            txtResultado.Text = "Pendiente";
        }
        else if (objTratamiento.ResultadoPositivo == 1)
        {
            txtResultado.Text = "Positivo";
        }
        else
        {
            txtResultado.Text = "Negativo";
        }

        txtCantidadPecesInicial.Text = objTratamiento.CantidadPecesInicial.ToString();
        txtCantidadPecesFinal.Text = objTratamiento.CantidadPecesFinal.ToString();
        txtTamanoPecesInicial.Text = objTratamiento.TamanoPecesInicial.ToString();
        txtTamanoPecesFinal.Text = objTratamiento.TamanoPecesFinal.ToString();

        this.listadoDetalle = objTratamiento.DetalleTratamiento;

        btnCerrarTratamiento.OnClientClick = "window.open('CerrarTratamiento.aspx?idTratamiento=" + txtCodigo.Text + "',null,'height=400,width=600,status=yes,toolbar=no,menubar=no,location=no'); return false;";

        configurarGrillaDettale();
        Session["banderaDetalleTratamiento"] = "f";
        SetMode(PageMode.ViewMode);
    }
    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        try
        {
            Tratamiento objTratamiento = new Tratamiento();

            objTratamiento.Descripcion = txtDescripcion.Text;
            objTratamiento.Veterinario = TPPVeterinario.ItemSelected as Veterinario;
            DateTime fechaini;
            if (DateTime.TryParse(txtFechaInicio.Text, out fechaini))
            {
                objTratamiento.FechaInicio = fechaini;
            }
            
            objTratamiento.FechaFin = new DateTime();

            DateTime fechaEstimada;
            if (DateTime.TryParse(TPCFechaEstimadaFin.Text, out fechaEstimada))
            {
                objTratamiento.FechaEstimadaFin = fechaEstimada;
            }
            else
            {
                _lblError.Text = "Incorrecta fecha estimada de fin";
                return;
            }

            if (cboTipos.SelectedValue == "0")
            {
                objTratamiento.TipoTratamiento = Convert.ToInt32(TipoTratamiento.Enfermedad);
                objTratamiento.EnfermedadEstanque = TPPEnfermedadAlarma.ItemSelected as EnfermedadesEstanques;
                objTratamiento.Alerta = null;
            }
            else
            {
                objTratamiento.TipoTratamiento =Convert.ToInt32( TipoTratamiento.Alerta);
                objTratamiento.Alerta = TPPEnfermedadAlarma.ItemSelected as Alerta;
                objTratamiento.EnfermedadEstanque = null;
            }

            

            objTratamiento.ResultadoPositivo = 0;

            int cantPeceInicial;
            if (int.TryParse(txtCantidadPecesInicial.Text, out cantPeceInicial))
            {
                objTratamiento.CantidadPecesInicial = cantPeceInicial;
            }
            else
            {
                _lblError.Text = "Incorrecta cantidad de peces inicial";
                return;
            }

            int cantPecesFinal;
            if (int.TryParse(txtCantidadPecesFinal.Text, out cantPecesFinal))
            {
                objTratamiento.CantidadPecesFinal = cantPecesFinal;
            }
            else
            {
                objTratamiento.CantidadPecesFinal = null;
            }

            decimal tamPeceIncial;
            if(decimal.TryParse(txtTamanoPecesInicial.Text, out tamPeceIncial))
            {
                objTratamiento.TamanoPecesInicial = tamPeceIncial;
            }
            else
            {
                _lblError.Text="Incorrecto tamaño de peces inicial";
                return;
            }

            decimal tamPecesFinal;
            if (decimal.TryParse(txtTamanoPecesFinal.Text, out tamPecesFinal))
            {
                objTratamiento.TamanoPecesFinal = tamPecesFinal;
            }
            else
            {
                objTratamiento.TamanoPecesFinal = null;
            }

            objTratamiento.DetalleTratamiento = listadoDetalle;

            if (getMode() == PageMode.NewMode)
            {
                if (Tratamiento.getManager.Insert(objTratamiento) != true)
                {
                    throw Tratamiento.getManager.GeneratedException;
                }
                SetMode(PageMode.ListMode);
                ConfigurarGrilla();
            }
            else
            {
                objTratamiento.IdTratamiento = int.Parse(txtCodigo.Text.Trim());
                if (Tratamiento.getManager.Update(objTratamiento) != true)
                {
                    throw Tratamiento.getManager.GeneratedException;
                }
                SetMode(PageMode.ViewMode);
            }
        }
        catch (Exception exc)
        {
            _lblError.Text = "error: No se pudo realizar la operación";
            Functions.LogError(exc);
        }
    }

    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }
    protected void TPDTratamientos_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DateTime fechaFin;
            if (DateTime.TryParse(DataBinder.GetPropertyValue(e.Row.DataItem, "FechaFin").ToString(),out fechaFin))
            {
                if (fechaFin == DateTime.MinValue)
                {
                    e.Row.Cells[3].Text = "";
                }
            }
            else
            {
                e.Row.Cells[3].Text = "";
            }
        }
    }
}
